package damon.utils;

import java.util.Arrays;

public class ByteChangeUtil {
	
	/**
	 * 	将int转化为4个byte数组
	 * @param i
	 * @return
	 */
	public static byte[] intTobytes(int i) {
	    byte[] bytes=new byte[4];
	    bytes[0]= (byte) (i>>24);
	    bytes[1]= (byte) (i>>16);
	    bytes[2]=(byte) (i>>8);
	    bytes[3]= (byte)i;
	    System.out.println(Arrays.toString(bytes));
	    return bytes;
	}
	
	/**
	 * 	将一个字节数组转化成二进制字符串
	 * @param bs
	 * @return
	 */
	public static String bytesTobinaryString(byte[] bs) {
		StringBuffer buf = new StringBuffer();
		for(byte b : bs) {
			buf.append(byteToBinaryStr(b));
		}
		return buf.toString();
	}
	
	/**
	 * 	将单个byte转化为8位二进制字符串
	 * @param b
	 * @return
	 */
	public static String byteToBinaryStr(byte b) {
		String binaryStr;
		int i;
		if(b<0) {//byte的范围是-127到128，负数是需要先转化为无符号int，才能用toBinaryString方法
			i = Byte.toUnsignedInt(b);
		}else {
			i = b;
		}
		binaryStr = Integer.toBinaryString(i);
		binaryStr = addZero(binaryStr, 8);
		return binaryStr;
	}
	
	/**
	 * 	将二进制前的0补齐
	 * 	超过补0后的长度会抛出运行时异常
	 * @param binaryStr 需要补0的字符串
	 * @param bitLength	补0后的长度
	 * @return
	 */
	public static String addZero(String binaryStr,int bitLength) {

        if(binaryStr.length()<=bitLength) {
            int addZero = bitLength - binaryStr.length();
            for(int i=0;i<addZero;i++) {
                binaryStr = "0"+binaryStr;
            }
            return binaryStr;
        }else {
            throw new RuntimeException("二进制补0时，byte字节转化出的二进制字符串超出"+bitLength+"位");
        }
    
		
	}
}
